Для изучения данного вопроса Вам необходимо создать проект из диалогового окна с кнопкой. У кнопки должна обрабатываться процедура нажатия. Как это сделать? Смотрите шаги 30-31 раздела MFC.
В файле DiaDlg.cpp создать код процедуры:
void OnRas(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError)
{
switch (rasconnstate)
{
case RASCS_OpenPort : AfxMessageBox("RASCS_OpenPort"); break;
case RASCS_PortOpened: AfxMessageBox("RASCS_PortOpened"); break;
case RASCS_ConnectDevice: AfxMessageBox("RASCS_ConnectDevice"); break;
case RASCS_DeviceConnected: AfxMessageBox("RASCS_DeviceConnected"); break;
default: AfxMessageBox("?");
}
}
Изменить реакцию на нажатие кнопки:
void CDiaDlg::OnDial()
{
HRASCONN hrascon=NULL;
RASDIALPARAMS rc[1];
rc[0].dwSize = sizeof(RASDIALPARAMS);
GetPrivateProfileString("Ras","EntryName","not ready",rc[0].szEntryName,99,"Ras.ini");
GetPrivateProfileString("Ras","Phone","not ready",rc[0].szPhoneNumber,99,"Ras.ini");
GetPrivateProfileString("Ras","UserName","not ready",rc[0].szUserName,99,"Ras.ini");
GetPrivateProfileString("Ras","Password","not ready",rc[0].szPassword,99,"Ras.ini");
strcpy(rc[0].szDomain,"");
RasDial(NULL,NULL,rc,0,OnRas,&hrascon);
}
Обратите внимание на RasDial(). Общая идея такова. После выполнения каждого шага соединения. Например, получения доступа к порту, или набора номера происходит вызов некоторой процедуры, куда передаются парамеры о шаге выполения и успехе операции.
Указатель на эту процедуру и тип параметров указан здесь (жирные) RasDial(NULL,NULL,rc,0,OnRas,&hrascon);.
Если в данной позиции стоит нуль, то функция должна иметь такие параметры:
VOID WINAPI RasDialFunc( UINT unMsg, RASCONNSTATE rasconnstate, DWORD dwError);
Если 1, то:
VOID WINAPI RasDialFunc1( HRASCONN hrasconn, UINT unMsg, RASCONNSTATE rascs,DWORD dwError,DWORD dwExtendedError);
А параметр 2 используется для NT.
В параметры Вашей функции передаеться тип операции в переменной rasconnstate которую и анализируем для вывода сообщений на экран.
Делайте всё необходимое и запускате. Сначала программа будет сообщать Вам о том, что порт открыт, потом о том, что устанавливается соединение и потом знаки вопроса. Список событий довольно длинный и я всё пока перечислять не стал.
Для контроля процесса соединения создайте функцию:
void OnRas(UINT unMsg,RASCONNSTATE rasconnstate,DWORD dwError)
{
......
}
Свяжите эту функцию с вызовом соединения:
RasDial(NULL,NULL,rc,0,OnRas,&hrascon);
Не забудьте, что параметры зависят от кода.